void Variance (ImSize, WinSize, InIm, MeanIm, VarIm)
int  ImSize, WinSize;
BYTE ** InIm;
BYTE ** MeanIm;
int  ** VarIm;
{
   int   r,c, y,x, Cen, WinArea, Mean;
   long  Sum, Diff;

   Cen = WinSize/2;
   WinArea = WinSize*WinSize;

   for (r=0; r<ImSize; r++) {
      for (c=0; c<ImSize; c++) {
         MeanIm [r][c] = 0;
         VarIm [r][c]  = 0;
   }  }

   for (r=0; r<ImSize-WinSize; r++) {
      for (c=0; c<ImSize-WinSize; c++) {
         Sum = 0;
         for (y=r; y<r+WinSize; y++)
            for (x=c; x<c+WinSize; x++)   Sum += (long) InIm [y][x];

         Sum /= WinArea;
         MeanIm [r+Cen][c+Cen] = (BYTE) Sum;
   }  }

   for (r=0; r<ImSize-WinSize; r++) {
      for (c=0; c<ImSize-WinSize; c++) {
         Mean = MeanIm [r+Cen] [c+Cen];
         Sum = 0;
         for (y=r; y<r+WinSize; y++) {
            for (x=c; x<c+WinSize; x++) {
               Diff = (long) Mean - InIm [y][x];
               Sum += Diff*Diff;
         }  }
         Sum /= WinArea-1;
         VarIm [r+Cen][c+Cen] = (int) Sum;
}  }  }
